有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

包含EBCDIC值的java打印字节数组未给出预期值

我创建了一个字符串,并使用EBCDIC编码将其转换为字节数组。当我打印数组时,H的值与EBCDIC图表中的不同

预期产出

“H”的EBCDIC值-->;200根据链接EBCDIC 1047 chart

实际产出

“H”的EBCDIC值-->;[-56]

public static void main(String[] args) throws UnsupportedEncodingException {
    String str = "H";
    byte[] b1 = new byte[10];
    b1 = str.getBytes("Cp1047");
    System.out.println(Arrays.toString(b1));

    for (byte b : b1) {
        System.out.println(b);
    }

    b1 = str.getBytes("UTF-16");
    System.out.println(Arrays.toString(b1));

    b1 = str.getBytes();
    System.out.println(Arrays.toString(b1));
}

共 (1) 个答案

  1. # 1 楼答案

    在你的圈子里

    for (byte b : b1)
       System.out.println(b);  
    

    Java将b(一个字节)提升为整数,从而打印出0xFFFFFFC8的值,这是对b(一个字节)的符号扩展0xFFFFFFC8是有符号数-56的两个补码表示。见this。通过执行以下操作,可以防止标志扩展:

    for (byte b  :b1)
      System.out.println(b & 0xFF);  
    

    这将导致打印值0xC8(十进制为200)